1
За пределами линейных массивов: Масштабирование до многомерных данных
AI032Lesson 4
00:00

Добро пожаловать в Великий переход. В программировании на ЦП мы определяем как итерировать; в ГПГПУ мы определяем что выглядит итерация. Этот сдвиг от ориентированной на инструкции к ориентированной на данные логике обусловлен абстракцией ядра.

1. Чертеж __global__

Используя __global__ квалификатор, вы не пишете функцию — вы проектируете масштабируемый чертеж. Одно выполнение ядра представляет собой одну автономную единицу работы, позволяя видеокарте координировать тысячи одинаковых задач по своей огромной конфигурации ядер без ручного управления потоками.

2. Решатель глобального адреса

Как один поток среди миллионов находит свою цель? Он использует детерминированный контракт, известный как формула индексации:

$$\text{threadID} = \text{blockIdx.x} \times \text{blockDim.x} + \text{threadIdx.x}$$

Эта формула действует как система координат, соединяющая логические данные программного обеспечения (массив) с физической иерархией аппаратного обеспечения (блоки и потоки).

Массив глобальной памяти (10 млн элементов)Блок 0Блок 1Блок N-1индекс = 1 * blockDim + threadIdx

3. Конфигурация выполнения

Параметры <<<B, T>>> определяют форму сетки. Это гарантирует прозрачную масштабируемость: ваш код выполняет одинаковую логику независимо от того, имеет ли оборудование 2 или 80 блоков стриминга (SM).

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>